const Koa = require('koa')
const app = new Koa()

// 27。打通注册用户的前后端通讯--这个要放在路由的前面，不然会报不允许跨域
const bodyParser = require('koa-bodyparser')
app.use(bodyParser()) //使用
// 跨域中间件
const cors = require('koa2-cors')
app.use(cors())

// 路由模块化
const Router = require('koa-router')
let user = require('./appApi/User')
let goods= require('./appApi/goods')  //商品详情
// 装载所有的路由
let router = new Router()
router.use('/user', user.routes()) //为路由增加前缀
router.use('/goods', goods.routes()) //商品详情
// router.use('/register', user.routes())
// 加载路由中间件
app.use(router.routes())
app.use(router.allowedMethods());






// // 这里如果要操作数据库了，那就得引入这个
// const mongoose = require('mongoose')
// // 引入database/init.js,他里面做了处理链接数据库的东西 及模型
const {connect, initSchema} =require('./database/init')


// 立即执行函数
;(async () =>{
  await connect()

  initSchema()  //init载入了所有模型，我上面一句话执行，也就是数据库链接成功了，立刻给我建的模型初始化，大概这句话写这里的意思
//   const User = mongoose.model('User')  //User暴露了模型,这里操作model取得，model可以操作数据库，
//   let oneUser = new User({userName:'大飞密码加密',password:'88888'}) //插入一条数据， 模型拿到，得new一下再有然后
//   oneUser.save().then(()=>{
//     console.log('插入成功')
//   })

//   // 读出已经插入的数据(有时候这个比前面插入的先跑，暂时未知道原因)
//   let Users= await User.find({}).exec()  //exec() ，看不出啥用 ？ 补：save.then和exex两者返回的都是 promise对象
//   //exec一般用于独立的动作一次性执行， then则用于连续性的动作  exec和then的参数是有所不同的，前者是 callback(err,doc)，后者则是 resolved(doc),rejected(err)

//   console.log('-------------')
//   console.log(Users)
//   console.log('-------------')
})()
// 然后我们在中终端里使用node index.js执行一下，可以看到数据库已经连接成功了。


// app.use(async(ctx)=>{
//   ctx.body = '<h1>hello Koa2</h1>'
// })
app.listen(3000,()=>{
  console.log('服务启动成功')
})
